package com.edu.exam.enums.quality.monitoring;

/**
 * 巡考审查状态枚举
 * 
 * 从PatrolRecord.ReviewStatus迁移而来
 * 定义了巡考记录审查的各种状态
 *
 * @author System
 * @version 1.0.0
 */
public enum PatrolReviewStatus {
    
    /**
     * 待审查状态
     */
    PENDING("待审查"),
    
    /**
     * 审查中状态
     */
    IN_PROGRESS("审查中"),
    
    /**
     * 已通过状态
     */
    APPROVED("已通过"),
    
    /**
     * 已拒绝状态
     */
    REJECTED("已拒绝"),
    
    /**
     * 需要修改状态
     */
    NEEDS_CHANGES("需要修改");

    private final String description;

    PatrolReviewStatus(String description) {
        this.description = description;
    }

    /**
     * 获取状态描述
     * 
     * @return 状态描述
     */
    public String getDescription() {
        return description;
    }

    /**
     * 判断是否为待审查状态
     * 
     * @return 如果是待审查状态返回true，否则返回false
     */
    public boolean isPending() {
        return this == PENDING;
    }

    /**
     * 判断是否为进行中状态
     * 
     * @return 如果是进行中状态返回true，否则返回false
     */
    public boolean isInProgress() {
        return this == IN_PROGRESS;
    }

    /**
     * 判断是否为已通过状态
     * 
     * @return 如果是已通过状态返回true，否则返回false
     */
    public boolean isApproved() {
        return this == APPROVED;
    }

    /**
     * 判断是否为已拒绝状态
     * 
     * @return 如果是已拒绝状态返回true，否则返回false
     */
    public boolean isRejected() {
        return this == REJECTED;
    }

    /**
     * 判断是否为需要修改状态
     * 
     * @return 如果是需要修改状态返回true，否则返回false
     */
    public boolean needsChanges() {
        return this == NEEDS_CHANGES;
    }

    /**
     * 判断是否为终态状态
     * 
     * @return 如果是终态状态返回true，否则返回false
     */
    public boolean isTerminalStatus() {
        return this == APPROVED || this == REJECTED;
    }

    /**
     * 判断是否为活跃状态（非终态）
     * 
     * @return 如果是活跃状态返回true，否则返回false
     */
    public boolean isActiveStatus() {
        return this == PENDING || this == IN_PROGRESS || this == NEEDS_CHANGES;
    }

    /**
     * 判断是否可以进行下一步操作
     * 
     * @return 如果可以进行下一步操作返回true，否则返回false
     */
    public boolean canProceedToNextStep() {
        return this == PENDING || this == NEEDS_CHANGES;
    }

    /**
     * 判断是否需要重新提交
     * 
     * @return 如果需要重新提交返回true，否则返回false
     */
    public boolean requiresResubmission() {
        return this == REJECTED || this == NEEDS_CHANGES;
    }
}